#include <bits/stdc++.h>
#define int long long 
using namespace std;

const int maxn = 105;
char matrix[maxn][maxn];
int dp[maxn][maxn][2][6]; // 走到 i, j, 需要向 右(0)/下(1) , 总共转向 k 次 的方案数
int n, m,k;

// 是否能通行
bool ok(int i, int j){
	if (i > n || j > m || matrix[i][j] == '#') {
		return false;
	}
	return true;
}


int dfs(int x, int y, int tag, int cnt) {
	if (!ok(x, y)) {
		return 0; 
	}
	if (x == n && y==m) {
		return 1;
	}
	if (dp[x][y][tag][cnt]) {
		return dp[x][y][tag][cnt]; // 已经记忆化过了
	}
	int ans = 0;
	if (cnt < k) {
		// 还能再转向
		if (tag == 0) { // 从右边过来的, 这次要向下了
			ans += dfs(x+1, y, 1, cnt+1);
		} else { // 向右			
			ans += dfs(x, y+1, 0, cnt+1);
		}
	} 
	// 不使用转向
	if (tag == 0) {
		// 继续向右
		ans += dfs(x, y+1, 0, cnt);		
	} else {
		// 向下
		ans += dfs(x+1, y, 1, cnt);				
	}
	return dp[x][y][tag][cnt] = ans;
}

void solve(){
	cin >> n >> m >> k;
	for (int i=1;i<=n;i++) {
		for (int j=1;j<=m;j++) {
			cin >> matrix[i][j];
		}
	}
	
	int ans = 0;
	if (ok(1, 2)) {
		ans += dfs(1, 2, 0, 0);
	}
	if (ok(2, 1)) {
		ans += dfs(2, 1, 1, 0);
	}
	
	cout << ans << '\n';
}




signed main(){
	ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
	solve();
	return 0;
}
